  (function(window){
    /**
     * 购物车
     * @param {*} prefix 前缀
     * @param {Array} defCart 购物车初始化 [{name:"",price:1,num:1}]
     */  
    var shopCart = function(prefix,defCart){
        Find.prototype.prefix = prefix;   //将Html元素的前缀传递给Find查找器
        var cart = new Cart(document.getElementById(prefix)[0]);
        for(var i in defCart){
            cart.add(defCart[i]);
        }
        cart.updateTotal();
      }
     //Cart购物车商品管理
     function Cart(){
        this.items = []; //定义所有商品，用数组形式
        var find = new Find(obj);
        this.all = find.className('all'); // cart-buttom
        this.bottom = find.className("buttom");
        this.num = find.className("total-num");  //获取购物车底部的数量
        this.price = find.className("total-price");//获取购物车底部的价格
        this.tmp = find.className("item");//获取到购物车商品的每个条件
        this.tmp.parentNode.removeChild(this.tmp);
        var cart = this;
        this.all.onclick = function(){
            cart.checkAll();
        };
     }
     
     Cart.prototype = {
         //商品的增加
         add:function(data){
            var tmp = this.tmp.cloneNode(true);//cloneNode拷贝所有属性和值
            var item = new Item(tmp,data);
            var cart = this;
            //选中某件商品
            item.check.onclick = function(){
                  cart.updateTotal();
            }
            //某件商品增加数量
            item.add.onclick = function(){
                item.num.textContent = ++item.data.num;
                item.updateTotal();//更新小计
                item.updateSubTotal();//更新总计
            } 
            //某件商品减少数量
            item.reduce.onclick = function(){
                if(item.data.num >1){
                    item.num.textContent = --item.data.num;
                    cart.updateTotal();
                    item.updateSubTotal();
                }else{
                    alert("至少选择1件，如果不需要，清直接删除");
                }
            }
            item.del.onclick = function(){
                if(confirm('您确定要删除此商品吗？')){
                    tmp.parentNode.removeChild(tmp); //将条件全部进行删除
                    cart.del(item);
                    cart.updateToatal();
                }
            }
            item.updateSubTotal();
            //保存新增的商品对象
            this.items.push(item);
            //在购物车底部之前新增一个项目
            this.buttom.brfore(tmp);
         },
         //商品的删除
         del:function(item){
             for(var i in this.items){
                 if(this.items[i] == item){
                     delete this.items[i]
                 } 
             } 
         },
         //更新商品的总计
         updateTotal:function(){
             var num =0,price = 0;
             for(var i in this.items){
                 var item = this.items[i];
                 if(item.check.checked){
                     num += item.data.num;
                     price += item,data.num * item.data.price;
                 }
             }
             this.num.textContent = num;
             this.price.textContent = price.toFixed(2);
         },
         //全选
         checkAll:function(){
             for(var i in this.items){
                 this.items[i].check.checked = true;
             }
             this.updateTotal();

         }
          

     }
     /**
      * 
      * @param {*} tmp 
      * @param {*} data 相当于数据库传递过来的数据
      */
     function Item(tmp,data){
         var find = new Find(tmp);
         this.check = find.className("check");
         this.name = find.className("name");
         this.price = find.className("price");
         this.num = find.className("num");
         this.add = find.className("reduce");
         this.subtotal = find.className("subtotal");
         this.del = find.className("del");
         //赋值操作
         this.data = data;
         this.name.textContent = date.name;
         this.price.textContent = data.prefix.toFixed(2);
         this.num.textContent = data.num;
     } 

     Item.prototype = {
         updateTotal:function(){
             this.subtotal.textContent = (this.data.num * this.data.price).toFixed(2);
         }
     }


     //Find查找器
     function Find(obj){
         this.obj = obj;

     }
     Find.prototype = {
         prefix:"",  //通过Html Class命名的前缀找到相应的元素（对象）
         //等回于将Cart-提取出来做为前缀
         className:function(className){
             return this.obj.getElementsByClassName(this.prefix + "-" + className)[0];
         }
    }    
    window['ShopCart'] =shopCart;
})(windows);